// 千分位分隔符
const percentiles = (number = 0) => {
  return number.toLocaleString();
};

// 数组扁平化
const flatten = (arr) => {
  return arr.reduce((prev, next) => {
    return prev.concat(Array.isArray(next) ? flatten(next) : next);
  }, []);
};

// 阿拉伯数字转换为中文大写数字
// 判断数字是否有效
// 四个一组，处理小单位，处理大单位
// 处理前导零，中间零，后面零
function numberToChinese(number) {
  // 定义大写数字及单位
  const numToChinese = "零壹贰叁肆伍陆柒捌玖";
  const units = ["", "拾", "佰", "仟"];
  const bigUnits = ["", "万", "亿", "兆"];
  
  // 检查是否为有效数字
  if (!/^\d+$/.test(number)) {
    throw new Error("Invalid input: input must be a non-negative integer.");
  }
  
  // 去掉前导零
  number = number.replace(/^0+/, '');

  // 如果数字为空，返回“零”
  if (number === "") return "零";

  let result = "";
  let unitIndex = 0;  // 单位索引
  let chunk = "";     // 每一组的结果
  
  // 处理每一组四个数字
  while (number.length > 0) {
    chunk = number.slice(-4);  // 取出最后4位
    number = number.slice(0, -4);
    
    let chunkResult = "";
    let zeroFlag = false; // 处理零的标志
    
    for (let i = 0; i < chunk.length; i++) {
      const digit = chunk[i];
      if (digit === '0') {
        if (!zeroFlag) {
          zeroFlag = true;
          if (i < chunk.length - 1) {
            chunkResult += "零";
          }
        }
      } else {
        if (zeroFlag) {
          zeroFlag = false;
        }
        chunkResult += numToChinese[digit] + units[chunk.length - i - 1];
      }
    }
    
    result = chunkResult + bigUnits[unitIndex] + result;
    unitIndex++;
  }
  
  // 去掉可能的末尾“零”
  return result.replace(/零+$/, "");
}

// 测试
console.log(numberToChinese("1234"));      // 壹仟贰佰叁拾肆
console.log(numberToChinese("100010001")); // 壹亿零壹万零壹
console.log(numberToChinese("100100100")); // 壹亿零壹佰万零壹佰


export { percentiles, flatten };
